home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / internet / irc_i_dodatki / kuang / kuangeleven28.lha / Rexx / Kuang11XDCC.amirx < prev    next >
Text File  |  1997-03-22  |  10KB  |  2 lines

  1. /* Kuang11 V2.5ß10 XDCC*/
  2. ;parse arg psec type com nick spec imop .;pr='XDCC';options results;"GETMYNICK";mynick=result;txdcc=getclip('st_xdccbank');if txdcc='' then txdcc=loadxdcc();parse var txdcc packs txdcc;spec=strip(spec,,' #');Select;when com='HELP' then nop;when spec=''&com='LIST' then spec='#';when ~datatype(spec,'W') then badpack();when spec<1|spec>packs then badpack();otherwise;end;sec=getclip('sc_xdccsec');kick=getclip('sc_xdcckick');slots=getclip('sc_xdccslots');select;when com='LIST' then xdcclist();when com='SEND'|com='MOVE' then xdccsend();otherwise;if com='HELP' then cecho(pr,'Sent XDCC Help to' nick);else cecho(pr,'Unknown request from' nick);notice(nick,und('Commands available with XDCC:'));m='/CTCP' mynick 'XDCC';notice(nick,m 'LIST - to get the list of offered packs.');notice(nick,m 'SEND|MOVE [N] - to send|move pack N.');end;exit;xdccsend:;initxdcc();if (sec=='ALL'|xdcc.spec.sect=='1')&psec==0 then;do;if kick='ON'&nick~=mynick&imop then 'RAW KICK' getchan() nick ':XDCC Kick';if sec='OPS' then str='opped';else str='registered';notice(nick,'You are not' str'.');cecho(pr,bld('Unregistered') com 'request from' bld(nick));exit;end;if (getslots()+xdcc.spec.files)<=slots|type='local'|type='queue' then;do;if xdcc.spec.files=1 then x='file,';else x='files,';notice(nick,'Sending you' xdcc.spec.desc 'which is' xdcc.spec.files x||adu(xdcc.spec.size)'.');"GETDCC";sent=0;bad=0;do i=1 to xdcc.spec.files;if ~exists(xdcc.spec.name.i) then;do;"SHOW";setclip('sc_iconified');cecho(pr,'File' xdcc.spec.name.i 'on pack' spec 'does not exists!');bad=bad+1;end;if bad>0 then iterate;if dcc.send.0>0&type~='local' then;do i2=1 to dcc.send.0;parse value dcc.send.i2 WITH mnick . . state . . filename .;if mnick=nick&filename=xdcc.spec.name.i&(state=0|state=2) then iterate i;end;sent=sent+1;'SAY /DCC' com nick xdcc.spec.name.i;end;if bad>0 then;do;notice(nick,'Pack' spec 'is corrupt.');cecho(pr,'Pack' bld(spec) 'is' bld('corrupt!.')bad'/'xdcc.spec.files 'missing');exit;end;if type='local' then exit;x=xdcc.spec.files-sent;if x>0 then;do;if sent=0 then;do;notice(nick,'Request for pack' spec 'aborted.Already sending.');cecho(pr,'Request for pack' spec 'from' bld(nick) 'aborted.'bld('Already sending'));exit;end;notice(nick,'Skipping' x 'files which are already sent.');cecho(pr,bld('Skipping') x 'files from pack' spec 'requested by' bld(nick));end;x=getclip('st_xdccsent');if x='' then x=xdcc.spec.size;else x=x+xdcc.spec.size;setclip('st_xdccsent',x);if type='queue' then str=' queued ';else str=' ';cecho(pr,'Sent'str'pack' bld(spec) 'to' bld(nick)'.Total snagged:'adu(x));l=getclip('st_xdccgets');p=pos('_'spec'@',l);if p~=0 then;do;p=p+length(spec)+2;parse var l beg=p gets rest;gets=gets+1;setclip('st_xdccgets',strip(beg||gets||rest));end;else setclip('st_xdccgets',strip(l '_'spec'@1'));signal on halt;delay(6000);"GETDCC";passed=0;if dcc.send.0>0 then;do;pcps=trunc(xdcc.spec.mcps/xdcc.spec.files);do i=1 to dcc.send.0;parse value dcc.send.i WITH mnick . . state . cps filename .;if mnick~=nick then iterate;do o=1 to xdcc.spec.files;if filename~=xdcc.spec.name.o then iterate;Select;when state=0 then;do;notice(nick,'Timeout reached');'SAY /DCC CLOSE SEND' nick filename;cecho(pr,bld('Timeout') 'reached on transfer to' bld(nick) 'file' filename);end;when pcps>cps then;do;notice(nick,'Minimum CPS for this pack is' xdcc.spec.mcps'!');'SAY /DCC CLOSE SEND' nick filename;cecho(pr,bld('Minimum CPS') 'on transfer to' bld(nick) 'not reached');end;otherwise;passed=passed+1;end;leave;end;end;end;if passed=0 then;do;l=getclip('st_xdccsent');if l~='' then setclip('st_xdccsent',l-xdcc.spec.size);l=getclip('st_xdccgets');if l='' then exit;p=pos('_'spec'@',l)+length(spec)+2;parse var l beg=p gets rest;gets=gets-1;setclip('st_xdccgets',strip(beg||gets||rest));end;exit;end;clip='st_xdccq';n=nick'@'spec'@'com'@'xdcc.spec.files'@'right(address(),1);x=getclip(clip);if find(x,n)~=0 then;do;notice(nick,'Pack' spec 'is already queued to you.');cecho(pr,bld(nick) 'requested' bld('queued') 'pack' spec bld('again'));exit;end;setclip(clip,strip(x n));x=strip(xdcc.spec.files);if x~='1' then x=x 'slots are';else x='a slot is';notice(nick,'Slots are full.Pack will be sent as soon as' x 'free.');cecho(pr,'Request from' bld(nick) bld('queued.'));exit;xdcclist:;if type=='ctcp' then;do;delay(right(x2d(pragma('ID')),2)*2);inuse='st_xl'right(address(),1);clip='st_xln'right(address(),1);if getclip(inuse)==1 then;do;z=getclip(clip);if find(z,nick)~==0 then;do;cecho(pr,bld('Repeated') 'LIST requests from' nick);exit;end;setclip(clip,strip(z psec spec nick));exit;end;setclip(inuse,1);end;listreq:;initxdcc();x='';xl='';if type~=='noti' then;do;totpks=0;sep=bld('/');lget=getclip('st_xdccgets');rates=getclip('sc_xdccrates');if sec=='OPS' then sectx='Ops';else sectx='Reg';style=getclip('sc_xdccstyle');if style=='SHORT' then generic();else prepline();if totpks==0&type='ctcp' then;do;x='No Packs offered'cr;header=0;end;else xl='send #N for pack #N';end;else xl='list for packs list';if xl~='' then;do;if type~=='xdcc'&type~=='vxdcc' then;do;if packs=1 then pkst='Pack';else pkst='Packs';x=und(bld('K¹¹' packs pkst '/ 'adu(xdcc.total)' Offered!')) '/ctcp' mynick 'xdcc' xl||cr||x;end;sep=bld('·');leech=getclip('st_xdccsent');if leech~='' then leech=' 'bld(adu(leech)) 'Snagged 'sep;record=getclip('st_maxcps');if record~='' then record=' 'bld(record'cps') 'Record 'sep;if kick=='ON' then kck=sep' Kick' bld('ON')' ';else kck='';qs=words(getclip('st_xdccq'));if qs=0 then qs='';else qs=' 'bld(qs) 'queued' sep;x=x||kck||sep bld(max(0,slots-getslots())) 'of' bld(slots) 'slots free 'sep||qs||leech||record||cr;end;if getclip('sc_xdccbold')~=='ON' then x=compress(x,x2c('02')||x2c('1F'));Select;when type=='pxdcc' then out='SAY ';when type=='noti' then;do;c=getclip('st_xdcca'right(address(),1));if c~==''&nick='' then;do;parse var c . c;mx=x;do i=1 to words(c);out='RAW PRIVMSG' word(c,i) ':';prtlist();x=mx;end;exit;end;else out='SAY ';end;when type=='xdcc'|type=='vxdcc' then out="ECHO P="d2c(27)"b«XDCC» ";otherwise;if totpks=0 then cecho(pr,'Unregistered LIST request from' bld(nick));else cecho(pr,'Sending packs' bld('description') 'to' bld(nick));do i=1 until x='';parse var x ln (cr) x;notice(nick,ln);end;delay(i*125);z=getclip(clip);if z~=='' then;do;parse var z psec spec nick z;setclip(clip,z);signal listreq;end;setclip(inuse);exit;end;prtlist();exit;prtlist:;do until x='';parse var x ln (cr) x;out||ln;end;return 0;prepline:;do i=s to e;if sec=='ALL'|(xdcc.i.sect=='1'&sec~=='OFF') then;do;if psec==0 then iterate;secv=sectx;end;else secv='Off';p=pos('_'i'@',lget);if p~=0 then;do;p=p+length(i)+2;parse var lget .=p gets .;gets=right(gets,2);end;else gets=' 0';if rates='ON' then srate=' [Rate:<'xdcc.i.rate'>]';else srate='';x=x'<'bld(i)'> Description: 'xdcc.i.desc||cr;x=x'.^--[Files:'right(xdcc.i.files,2)'] [Size:'right(adu(xdcc.i.size),5)'] [Gets:'right(gets,2)'] [MinCPS: 'right(xdcc.i.mcps,4)'] [Sec:'secv']'srate||cr;if type=='vxdcc' then;do w=1 to xdcc.i.files;x=x||'|_'||xdcc.i.name.w||cr;end;end;totpks=totpks+1;return 0;generic:;sectx='('bld(sectx)')';do i=s to e;if sec=='ALL'|(xdcc.i.sect=='1'&sec~=='OFF') then;do;if psec==0 then iterate;secv=sectx;end;else secv='';if xdcc.i.mcps~=0 then scps=bld(' ('xdcc.i.mcps'cps Min.)');else scps='';if xdcc.i.files=1 then fls='';else fls=xdcc.i.files'x';p=pos('_'i'@',lget);if p~=0 then;do;p=p+length(i)+2;parse var lget .=p gets .;gets=right(gets,2);end;else gets=' 0';if rates='ON' then srate=sep'<'xdcc.i.rate'>';else srate='';x=x'<'bld(i)'>:'bld('[')gets'x'sep||fls||right(adu(xdcc.i.size),5)srate||bld(']')secv xdcc.i.desc||scps||cr;if type=='vxdcc' then;do w=1 to xdcc.i.files;x=x||'|_'||xdcc.i.name.w||cr;end;totpks=totpks+1;end;return 0;initxdcc:;xdcc=txdcc;if spec='#' then;do;e=packs;s=1;end;else;do;e=spec;s=spec;end;xdcc.='';cr=x2c('0A');ff=x2c('ff');fe=x2c('fe');p=pos(ff||s,xdcc);xdcc.total=0;parse var xdcc=p xdcc;do i=s to e;parse var xdcc . (fe) xdcc.i.files (fe) ns (fe) xdcc.i.desc (fe) xdcc.i.size (fe) xdcc.i.rate (fe) xdcc.i.sect (fe) xdcc.i.mcps (ff) xdcc;do x=1 to xdcc.i.files;parse var ns nm (cr) ns;xdcc.i.name.x=nm;end;xdcc.total=xdcc.total+xdcc.i.size;end;return 0;loadxdcc:PROCEDURE expose type nick pr;fn='Kuang11/xdcc';if ~open(file,fn,'R') then;do;if type='ctcp' then notice(nick,'No Packs Offered');cecho(pr,bld('No Packs in list'));if getclip('sc_xdcc')=='ON' then 'SAY /XDCC XDCC';exit;end;cr=x2c('0A');ff=x2c('ff');fe=x2c('fe');pack=0;names='';packinfo='';files=0;desc='';do while ~eof(file);raw=strip(readln(file));Select;when raw='#' then iterate;when substr(raw,1,1)='`' then;do;nm=substr(raw,2);if ~exists(nm) then cecho(pr,'File' nm 'on pack' pack+1 'does not exist!');names=names||nm||cr;files=files+1;end;when desc='' then desc=raw;otherwise;pack=pack+1;parse var raw size rate sec mincps .;if rate='' then rate='1====';if sec='' then sec=0;if mincps='' then mincps=0;p=pos('*',rate);if p~=0 then rate=copies('=',5-p)6-p||copies('=',p-1);packinfo=packinfo||ff||pack||fe||files||fe||names||fe||desc||fe||size||fe||rate||fe||sec||fe||mincps||ff;names='';files=0;desc='';end;end;close(file);x=pack||' '||packinfo;setclip('st_xdccbank',x);setclip('st_xdccgets');initc('sc_xdccstyle','SHORT');initc('sc_xdccsec','PACKS');initc('sc_xdcckick','OFF');initc('sc_xdccslots',6);return x;initc:PROCEDURE;x=arg(1);if getclip(x)='' then setclip(x,arg(2));return 0;cecho:;"ECHO P="d2c(27)"b«"arg(1)"»" arg(2)'.';return 0;notice:;'RAW NOTICE' arg(1) ':'arg(2);return 0;getchan:;"GETCHANNEL";return result;bld:PROCEDURE;b=x2c('02');return b||arg(1)||b;und:PROCEDURE;u=x2c('1F');return u||arg(1)||u;inv:PROCEDURE;i=x2c('16');return i||arg(1)||i;adu:;if length(arg(1))<4 then return arg(1)'kb';else return trunc(arg(1)/1000,1)'mb';getslots:procedure;l=showlist('W') showlist('T');x=0;p=1;do until p=0;p=pos('AmIRC DCC S',l,p);if p~==0 then;do;x=x+1;p=p+21;end;end;return x;badpack:;nx='';if type='ctcp' then;do;notice(nick,'Invalid pack number' spec);nx=' from' bld(nick);end;cecho(pr,'Invalid pack number' bld(spec)nx);exit;syntax:;"ECHO P=K11XDCC Command on line" SIGL "returned" RC ":" errortext(rc) sourceline(SIGL);exit;halt:;cecho(pr,'XDCC Send monitor halted');exit